/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.jsf.util.Constantes;
import com.jsf.util.JsfUtil;
import com.mb.mantenedores.Horario;
import com.persistencia.domain.*;
import com.service.*;
import com.service.impl.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.event.CellEditEvent;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author kenny
 */
@ManagedBean
@ViewScoped
public class DocenteController implements Serializable{
    private List<Docente> lista = new ArrayList<Docente>();
    private List<Docente> listadocentefiltrados;
    private List<Categoria> listacategoria = new ArrayList<Categoria>();
    private Docente docenteseleccionado;
    private Docente docentenuevo;
    private Ciclo ciclo;
    private Clase clase;
    private DocenteService docenteService;
    private DocenteCategoriaService docenteCategoriaService;
    private DocentexClaseService docentexClaseService;
    private Docentexcategoria docentexcategoria;
    private DocentePeriodoService docentePeriodoService;
    private List<Docentexperiodo> listadocentexperiodo = new ArrayList<Docentexperiodo>();
    private List<Docentexclase> listadocentexclase = new ArrayList<Docentexclase>();
    
    
    private CategoriaService categoriaService;
    private Categoria categorianuevo;
    Persona usuario;
    
    private Persona personanuevo;
    private PersonaService personaService;
    private String categoriaseleccionada="";
    private String categoriaxdefecto="";
    private String codigo="";
    private DocentexcategoriaPK docentexcategoriaPK;
    private List<String> listaHorario;
    private String horario="";
    private String disponible = "XXX";
    private String nodisponible = "";
    
    private String M[][]={ {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},
                           {"0", "0", "0", "0", "0", "0"},                          
                           {"0", "0", "0", "0", "0", "0"}
                        };
    
    /**
     * Creates a new instance of DocenteController
     */
    public DocenteController() {
        
        usuario = (Persona)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
        
        
        System.out.println("Entra1");
        System.out.println("Nombre Usuario:"+usuario.getVNombre());
        System.out.println("Entra2");
        docenteseleccionado = new Docente();
        System.out.println("Nombre:"+usuario.getDocenteList().get(0).getVCodigo());
       
        docenteseleccionado = usuario.getDocenteList().get(0);
        System.out.println("Id de docente seleccionado:"+docenteseleccionado.getNDcnId());
        
        
        docentenuevo = new Docente();
        personanuevo = new Persona();
        ciclo = new Ciclo();
        clase = new Clase();
        docentexcategoria = new Docentexcategoria();
        docenteService = new DocenteServiceImpl();
        personaService = new PersonaServiceImpl();
        docentePeriodoService = new DocentePeriodoServiceImpl();
        categoriaService = new CategoriaServiceImpl();
        docentexClaseService = new DocentexClaseServiceImpl();
        categorianuevo = new Categoria();
        docenteCategoriaService = new DocenteCategoriaServiceImpl();
        docentexcategoriaPK = new DocentexcategoriaPK();
        listaHorario = new ArrayList<String>();
        listadocentefiltrados = new ArrayList<Docente>();
        //horario = new Horario();
        
        cargar();
        cargardocenteperiodo(docenteseleccionado.getNDcnId());
    }
    
    public void cargar(){
        try {
            //docenteseleccionado = new Docente();
            for(int i=0; i<14; i++){
                for(int j=0; j<6; j++){
                    //System.out.println("M["+i+"]["+j+"]:"+ M[i][j]);
                }
            }
            
            //lista = docenteService.obtenerListaDocentes();
            lista = docenteService.buscarDocentes();
            
            listacategoria =categoriaService.obtenerListaCategorias();
            /*for(int i=0; i<listacategoria.size(); i++){
                System.out.println("Categoria:"+listacategoria.get(0).toString());
            }*/
            
            for(int i=1; i<=14; i++){
                
                //System.out.println("Valor de i"+i);
                switch (i) {
                    case 1:  horario = ("8:00-9:00");
                            //System.out.println("-1");
                            break;
                    case 2:  horario =("9:00-10:00");
                             //System.out.println("-2");
                            break;
                    case 3:  horario =("10:00-11:00");
                     //System.out.println("3");
                            break;
                    case 4:  horario =("11:00-12:00");
                     //System.out.println("5");
                            break;
                    case 5:  horario =("12:00-13:00");
                    //System.out.println("6");
                            break;
                    case 6:  horario =("13:00-14:00");
                    //System.out.println("6");
                            break;
                    case 7:  horario =("14:00-15:00");
                    //System.out.println("7");
                            break;
                    case 8:  horario =("15:00-16:00");
                    //System.out.println("8");
                            break;
                    case 9:  horario =("16:00-17:00");
                    
                    //System.out.println("9");
                            break;
                    case 10:  horario =("17:00-18:00");
                    //System.out.println("10");
                            break;
                    case 11: horario =("18:00-19:00");
                    //System.out.println("11");
                            break;
                    case 12: horario =("19:00-20:00");
                    //System.out.println("12");
                            break;
                    case 13: horario =("20:00-21:00");
                    //System.out.println("13");
                            break;
                    case 14: horario =("21:00-22:00");
                    //System.out.println("14");
                            break;
                      
                    default: horario =("--");
                            break;    
                }
                /*horario.setLunes("0");
                horario.setMartes("0");
                horario.setMiercoles("0");
                horario.setJueves("0");
                horario.setViernes("0");
                horario.setSabado("0");
                horario.setDomingo("0");*/
                listaHorario.add(horario);
                
            }
            
            
            //lista = docenteService.buscarDocentes();
        } catch (Exception ex) {
            Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void pasarparametros(SelectEvent event) {
        System.out.println("Entramos");
        docenteseleccionado = (Docente) event.getObject();
        
        
 
    }
    
    public void eliminar(){
        if(docenteseleccionado!=null){
            try {
                System.out.println("Entramos a eliminar");          
                    System.out.println("Docente Seleccioando"+docenteseleccionado.getVCodigo());
                
                    docenteseleccionado.setVEstado("0");
                    docenteService.actualizarDocente(docenteseleccionado);
                    //controladortrabajos.edit(trabajo);
                       
                    FacesMessage msg = new FacesMessage("El Docente se elimino satisfactoriamente.");
                    FacesContext.getCurrentInstance().addMessage(null, msg);
                
                cargar();
            } catch (Exception ex) {
                Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
            }
       }else{
            System.out.println("No se ha seleccionado un docente");
            FacesMessage msg = new FacesMessage("Error: Debe Seleccionar un Docente");  
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
        
    }
    
    public void editar(){
        try {
                System.out.println("Categoria seleccionada:"+categoriaxdefecto);
                categorianuevo= categoriaService.buscarCategoriaxNombre(categoriaxdefecto);
                docenteService.actualizarDocente(docenteseleccionado);
                
                docentexcategoriaPK.setNCtgId(categorianuevo.getNCtgId());
                docentexcategoriaPK.setNDcnId(docenteseleccionado.getNDcnId());
            
                docentexcategoria.setDocentexcategoriaPK(docentexcategoriaPK);
                //docentexcategoria.setVEstado("1");
                docenteCategoriaService.actualizarDocenteCategoria(docentexcategoria);
                FacesMessage msg = new FacesMessage("Se edito el Docente satisfactoriamente.");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                //JsfUtil.addErrorMessage(ResourceBundle.getBundle("/Bundle").getString("proyectoCreado"));
                cargar();
        } catch (Exception ex) {
            Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
        }       
    }
    
    public void nuevo(){
        try {
            System.out.println("Entramos a crear docente");
            
            
            //personanuevo.setNPrsId(1);
            System.out.println("Nombre "+ personanuevo.getVNombre());
            System.out.println("Apellidos "+ personanuevo.getVApellidos());
            personanuevo.setVGenero("m");
            personanuevo.setVEstado("1");
            personaService.registrarPersona(personanuevo);        
            //docentenuevo.setNPrsId(personanuevo);
            //docentenuevo.setNDcnId(6);
            //System.out.println("Numero Maximo"+ personaService.personaMaxId());
            personanuevo.setNPrsId(personaService.personaMaxId());
            docentenuevo.setNPrsId(personanuevo);
            docentenuevo.setVEstado("1");
            docenteService.registrarDocente(docentenuevo);
            
            //categoriaService.
            categorianuevo= categoriaService.buscarCategoriaxNombre(categoriaseleccionada);
            
            //docentexcategoria.setDocente(docentenuevo);
            //docentexcategoria.setCategoria(categorianuevo);
            docentexcategoriaPK.setNCtgId(categorianuevo.getNCtgId());
            docentexcategoriaPK.setNDcnId(docentenuevo.getNDcnId());
            
            docentexcategoria.setDocentexcategoriaPK(docentexcategoriaPK);
            docentexcategoria.setVEstado("1");
            docenteCategoriaService.actualizarDocenteCategoria(docentexcategoria);
            
            FacesMessage msg = new FacesMessage("El Docente se creo satisfactoriamente.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            docentenuevo = new Docente();
            cargar();
        } catch (Exception ex) {
            Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public SelectItem[] getItemsCategoriasSelectOne(){
        try {
            System.out.println("Categorias");
            
            return JsfUtil.getSelectItems(categoriaService.obtenerListaCategorias(), false);
        } catch (Exception ex) {
            Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    
    public Docente getDocenteseleccionado() {
        return docenteseleccionado;
    }

    public void setDocenteseleccionado(Docente docenteseleccionado) {
        System.out.println("Entramos a seleccionado a");
        
        this.docenteseleccionado = docenteseleccionado;
        cargardocenteperiodo(this.docenteseleccionado.getNDcnId());
        System.out.println(docenteseleccionado.getNPrsId().getVNombre());
        //;
        //categoriaxdefecto = docenteseleccionado.g
        System.out.println("Aqui :"+this.docenteseleccionado.getVCodigo());
        //setCodigo(docenteseleccionado.getVCodigo());       
    }
    
    public void cargardocenteperiodo(int nDcnId){
        
        try {
            System.out.println("Entramos a cargar Docente");
            listadocentexperiodo = docentePeriodoService.buscarDocentePeriodo(nDcnId);
            int contador = 0;
            
            for(int j=0; j<Constantes.columnaPeriodo; j++){
               for(int i=0; i<Constantes.filaPeriodo; i++){
                    M[i][j] = listadocentexperiodo.get(contador).getVEstado();
                    System.out.println("=) M["+i+"]["+j+"]:"+ M[i][j] +"contador"+contador);
                    //System.out.println("M["+i+"]["+j+"]:"+ M[i][j]);
                    contador++;
                }
            }
        } catch (Exception ex) {
            Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public void actualizardisponibilidad(){
        System.out.println("Entramos a actualizardis");
        
        int contador = 0;
        
        for(int j=0; j<Constantes.columnaPeriodo; j++){
            for(int i=0; i<Constantes.filaPeriodo; i++){
                System.out.println("=) M["+i+"]["+j+"]:"+ M[i][j] +"contador"+contador);
                contador++;
            }
            
        }
        contador =0;
        for(int j=0; j<Constantes.columnaPeriodo; j++){
            for(int i=0; i<Constantes.filaPeriodo; i++){
                try {
                    listadocentexperiodo.get(contador).setVEstado( ((M[i][j].equals("XXX") || (M[i][j].equals("1")))? "1": "0"));
                    docentePeriodoService.actualizarDocentePeriodo(listadocentexperiodo.get(contador));
                    System.out.println("=) M["+i+"]["+j+"]:"+ M[i][j] +"contador"+contador);
                        //System.out.println("M["+i+"]["+j+"]:"+ M[i][j]);
                    contador++;
                } catch (Exception ex) {
                    Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
       
        FacesMessage msg = new FacesMessage("La disponibilidad del docente se actualizo con exito");  
        FacesContext.getCurrentInstance().addMessage(null, msg); 
    }
    public void onCellEdit(CellEditEvent event) {
        System.out.println("Aquiii");
        Object oldValue = event.getOldValue();  
        Object newValue = event.getNewValue();  
          
        if(newValue != null && !newValue.equals(oldValue)) {  
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);  
            FacesContext.getCurrentInstance().addMessage(null, msg);  
        }
        /*for(int i=0; i<14; i++){
                for(int j=0; j<6; j++){
                    System.out.println("M["+i+"]["+j+"]:"+ M[i][j]);
                }
        }*/
    }
    public void buscardocentexclase(){
        try {
            clase.setNClsId(1);
            ciclo.setNCicId(1);
            listadocentexclase = docentexClaseService.buscarClasexDocentesfiltrados(ciclo, clase);
        } catch (Exception ex) {
            Logger.getLogger(DocenteController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    public List<Docente> getLista() {
        return lista;
    }

    public void setLista(List<Docente> lista) {
        this.lista = lista;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public Docente getDocentenuevo() {
        return docentenuevo;
    }

    public void setDocentenuevo(Docente docentenuevo) {
        this.docentenuevo = docentenuevo;
    }

    public PersonaService getPersonaService() {
        return personaService;
    }

    public void setPersonaService(PersonaService personaService) {
        this.personaService = personaService;
    }

    public Persona getPersonanuevo() {
        return personanuevo;
    }

    public void setPersonanuevo(Persona personanuevo) {
        this.personanuevo = personanuevo;
    }

    public String getCategoriaseleccionada() {
        return categoriaseleccionada;
    }

    public void setCategoriaseleccionada(String categoriaseleccionada) {
        this.categoriaseleccionada = categoriaseleccionada;
    }

    public String getCategoriaxdefecto() {
        return categoriaxdefecto;
    }

    public void setCategoriaxdefecto(String categoriaxdefecto) {
        this.categoriaxdefecto = categoriaxdefecto;
    }

    public List<String> getListaHorario() {
        return listaHorario;
    }

    public void setListaHorario(List<String> listaHorario) {
        this.listaHorario = listaHorario;
    }

    public String getHorario() {
        return horario;
    }

    public void setHorario(String horario) {
        this.horario = horario;
    }
    
    

    public String[][] getM() {
        return M;
    }

    public void setM(String[][] M) {
        this.M = M;
    }

    public List<Docentexperiodo> getListadocentexperiodo() {
        return listadocentexperiodo;
    }

    public void setListadocentexperiodo(List<Docentexperiodo> listadocentexperiodo) {
        this.listadocentexperiodo = listadocentexperiodo;
    }

    public List<Docentexclase> getListadocentexclase() {
        return listadocentexclase;
    }

    public void setListadocentexclase(List<Docentexclase> listadocentexclase) {
        this.listadocentexclase = listadocentexclase;
    }

    public DocentexClaseService getDocentexClaseService() {
        return docentexClaseService;
    }

    public void setDocentexClaseService(DocentexClaseService docentexClaseService) {
        this.docentexClaseService = docentexClaseService;
    }

    public List<Docente> getListadocentefiltrados() {
        return listadocentefiltrados;
    }

    public void setListadocentefiltrados(List<Docente> listadocentefiltrados) {
        this.listadocentefiltrados = listadocentefiltrados;
    }

    public String getDisponible() {
        return disponible;
    }

    public void setDisponible(String disponible) {
        this.disponible = disponible;
    }

    public String getNodisponible() {
        return nodisponible;
    }

    public void setNodisponible(String nodisponible) {
        this.nodisponible = nodisponible;
    }
    
    
    
}
